<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" encoding="UTF-8" doctype-system="cs" indent="no"/>

  <xsl:template match="/">
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using formworks;
    using entity;

    namespace service.impl
    {
    /// <summary>
      /// 名称：<xsl:value-of select="/node()/@table"/>Action（<xsl:value-of select="/node()/@name"/>的业务层）
      /// 描述：<xsl:value-of select="/node()/@table"/>（<xsl:value-of select="/node()/@name"/>）的实现类
      /// 数据库名称：<xsl:value-of select="/node()/@table"/>
      /// ActionBase实现了IAction基本的数据操作接口操作，
      /// 可直接使用all,add,modify,delete等操作
      /// I<xsl:value-of select="/node()/@table"/>Action是此实现的接口，实现前请在I<xsl:value-of select="/node()/@table"/>Action中
      /// 定义好接口，以便日后扩展
      ///
    </summary>
    public class <xsl:value-of select="/node()/@table"/>Action : ActionBase<Goods>
      , I<xsl:value-of select="/node()/@table"/>Action
      {

      #region ActionBase层继承的操作对象
      /************************************************************************/
      /*
      * 这里只是做个参考，
      * 已经继承可直接使用的变量
      */
      /************************************************************************/
      /**
      /// <summary>
        /// 数据库操作对象
        ///
      </summary>
      protected DB db;
      /// <summary>
        /// 当前使用的实体列表变量
        ///
      </summary>
      protected List<T>
        dataList = null;
        //end
      </T>
      **/
      #endregion


      /// <summary>
        /// 初始化:对象
        ///
      </summary>
      public <xsl:value-of select="/node()/@table"/>Action()
      {

      }

      #region I<xsl:value-of select="/node()/@table"/>Action 成员


      #endregion




      #region IAction 成员
      /************************************************************************/
      /*
      * 文中T 若要重写，请用 Goods 对象代替，
      */
      /************************************************************************/
      /**
      /// <summary>
        /// 查询对象表中所有记录
        /// 接收数据：请求此方法即可
        /// 返回数据：json字符串
        ///
      </summary>
      /// <param name="request">前台http请求</param>
      /// <returns>json数据</returns>
      public string all(System.Web.HttpRequest request)
      {
      try
      {
      string sqlStr = "select * from " + typeof(T).Name;
      //查询出指定对象的数据
      dataList = db.queryList<T>(sqlStr); //</T>
      //构建出json串，并返回
      string json = constructQueryData();
      return json;
      }
      catch (System.Exception ex)
      {
      return JsonBag.format("exception", ex.Message);
      }

      return "";
      }

      /// <summary>
        /// 添加记录，可以接收多条记录
        /// 接收数据：json字符串
        /// 返回数据：{state:success,col:1} or {state:fail}
        ///
      </summary>
      /// <param name="request">前台http请求</param>
      /// <returns>{state:success,col:1} or {state:fail}</returns>
      public string add(System.Web.HttpRequest request)
      {
      try
      {

      //dataList = new List<T>(); //</T>
      //获取请求
      string json = request.Params[0].ToString();
      dataList = JsonBag.deserializeModelList<T>(json); //</T>

      //保存到数据库
      refMsg(db.insertModel<T>((T)dataList[0])); //</T>
      }
      catch (System.Exception ex)
      {
      return JsonBag._sbrace
      + JsonBag.format("exception", ex.Message)
      + JsonBag._ebrace;
      }

      return "";
      }

      /// <summary>
        /// 修改操作，可修改多条
        /// 接收数据：json字符串
        /// 返回数据：{state:success,col:1} or {state:fail}
        ///
      </summary>
      /// <param name="request">前台http请求</param>
      /// <returns>{state:success,col:1} or {state:fail}</returns>
      public string modify(System.Web.HttpRequest request)
      {
      try
      {
      //dataList = new List<T>(); //</T>
      //获取请求
      string json = request.Params[0].ToString();
      dataList = JsonBag.deserializeModelList<T>(json); //</T>

      //更新操作
      refMsg(db.updateModel<T>((T)dataList[0])); //</T>
      }
      catch (System.Exception ex)
      {
      return JsonBag._sbrace
      + JsonBag.format("exception", ex.Message)
      + JsonBag._ebrace;
      }

      return "";
      }

      /// <summary>
        /// 删除数据，以ID为标识
        /// 接收数据：数组字符串 例：id1,id3,id4
        /// 返回数据：{state:success,col:1} or {state:fail}
        ///
      </summary>
      /// <param name="request">前台http请求</param>
      /// <returns>{state:success,col:1} or {state:fail}</returns>
      public string delete(System.Web.HttpRequest request)
      {
      try
      {
      //获取请求
      string json = request.Params[0];
      refMsg(db.deleteByID<T>(json.Split(','))); //</T>

      }
      catch (System.Exception ex)
      {
      return JsonBag._sbrace
      + JsonBag.format("exception", ex.Message)
      + JsonBag._ebrace;
      }

      return "";
      }


      /// <summary>
        /// 构建查询返回的数据串
        /// 可根据需要重写构建查询返回数据串的格式。
        /// 传入：dataList ： List <![CDATA[&lt；T&gt]]>;
        /// 返回：json 字符串
        ///
      </summary>
      /// <returns>json 字符串</returns>
      public string constructQueryData()
      {
      //dataList = objectList as List<T>; //</T>
      return JsonBag._sbrace
      + JsonBag.format("total", dataList.Count)
      + JsonBag._comma
      + JsonBag.format("page", 1)
      + JsonBag._comma
      + JsonBag.format("rows", JsonBag.serializeModelList<T>(dataList)) //</T>
      + JsonBag._ebrace;
      }

      /// <summary>
        /// 通过数据库操作返回影响行数，
        /// 可根据需要重写消息返回的格式。
        /// 判定返回的消息
        /// 接收：影响行数
        /// 返回：{state:success,col:1} or {state:fail}
        ///
      </summary>
      /// <param name="col">影响行数</param>
      /// <returns></returns>
      public string refMsg(int col)
      {
      if ( col <xsl:text disable-output-escaping="yes"><![CDATA[>]]></xsl:text> 0 )
      {
      //返回状态为成功，并返数据库添加成功条数
      return JsonBag._sbrace
      + JsonBag.format("state", "success")
      + JsonBag._comma
      + JsonBag.format("col", col)
      + JsonBag._ebrace;
      }
      else
      {
      //返回状态为失败
      return JsonBag._sbrace
      + JsonBag.format("state", "fail")
      + JsonBag._ebrace;
      }
      }
      **/
      /************************************************************************/
      #endregion

      }//end
    </Goods>
    }//end namespace

  </xsl:template>

</xsl:stylesheet>
